# 购物系统业务需求V1.0：（需要使用到列表技术）
# 购物：
#         1.用户的账户里有钱
#         2.用户可推一个空的购物车进商场
#         3.开始购物，将自己想要的商品添加购物车
#         4.打印购物小条
#
# 程序和数据流程梳理分析：
# 	购前：
# 		钱要有：money
# 		有足够商品：列表来存储list
# 		有购物车：列表list
#
# 	购中：
# 		是否有这个商品：
# 			有
# 				钱够不够：
# 					够：
# 						添加到购物车！
# 						钱减去商品价格！
# 						恭喜，购买成功！您的卡余额还剩xxx
# 					不够：
# 						穷鬼，钱不够！请到其他超市购买！
# 			没有：
# 				没有这个商品，别瞎弄！
# 	购后：
# 		输入Q，q: 退出：
# 		打印购物小条！
#
#
def shopping(money,shop_list):
    cart = []
    while True:
        print("可用商品：", [item[0] for item in shop_list])  # 显示可用商品
        choice = input('请选择要购物的商品（输入商品名，或输入Q/q退出）：')
        if choice == 'Q' or choice == 'q':  #退出
            break
        for item in shop_list:
            if item[0] == choice:   #有这个商品
                if money >= item[1]:       #钱够
                    cart.append(item)       #添加到购物车
                    money -= item[1]        #钱减去相应价格
                    print(f'恭喜，购买成功！您的卡余额还有{money}元')
                    break
                else:
                    print('穷鬼，钱不够！青岛其他超市购买！')
                    break
        else:
            print('没有这个商品，别瞎弄！')

    return cart,money

def shopping_before(money,shop_list):
    if money > 0:       #钱够
        cart, money_after = shopping(money, shop_list)
        print('打印购物小条：')
        total_price = 0
        for item, price in cart:
            print(f'{item}:{price}元')      #单个商品的名称:价格
            total_price += price            #总计费用
        print(f'共计消费{total_price}元')
        print(f'剩余金额{money_after}元')
    else:
        print('没钱，别进了！')

money = 500
shop_list = [('fruits', 100),
             ('meet', 150),
             ('milk', 80),
             ('foods', 300),
             ('juice', 5),
             ('coke', 20)]

shopping_before(money,shop_list)

# 购物系统业务需求V2.0：
# 1.	现在用户在进商场之前需要从10张优惠券中，随机抽取一张优惠券。
# 比如抽到一个空凋的8折优惠券，后面在购物的过程中，空凋就可以按照8折后的价格来购买。
# 2.	优化购物小条的人性化打印。
# 	购物时间，卡余额，购物数量，购买总商品的价值。
# 3.	添加退货功能。在购买途中，某个商品不要了，退回到购物架中！

from datetime import datetime
import random

def shopping(money, shop_list, youhuiquan):
    cart = []
    applied_youhuiquan = False  # 记录是否已经使用过优惠券
    print(f"恭喜！你抽到了一张{youhuiquan['name']}的{youhuiquan['discount']}折优惠券")

    while True:
        print("可用商品：", [item['name'] for item in shop_list])  # 显示可用商品
        choice = input('请选择要购物的商品（输入商品名，或输入Q/q退出，输入T/t退货）：')
        if choice == 'Q' or choice == 'q':  # 退出
            break
        elif choice == 'T' or choice == 't':  # 退货
            if cart:
                print("购物车中的商品：")
                for idx, item in enumerate(cart):
                    print(f"{idx + 1}. {item['name']} - {item['price']}元")
                try:
                    item_index = int(input("请输入要退货的商品编号：")) - 1
                    if 0 <= item_index < len(cart):
                        item_to_return = cart.pop(item_index)
                        money += item_to_return['price']
                        print(f'已退货：{item_to_return["name"]}，卡余额恢复为{money}元')
                    else:
                        print("输入的编号不正确，请重新输入。")
                except ValueError:
                    print("输入的不是数字，请输入正确的编号。")
            else:
                print('购物车为空，无法退货')
            continue

        for item in shop_list:
            if item['name'] == choice and item['count'] > 0:  # 有这个商品并且库存大于0
                discount_price = item['price']
                if youhuiquan['name'] == item['name'] and not applied_youhuiquan:
                    discount_price = item['price'] * youhuiquan['discount'] * 0.1
                    applied_youhuiquan = True  # 标记优惠券已使用
                if money >= discount_price:  # 钱够
                    item['count'] -= 1  # 减少库存
                    cart.append({'name': item['name'], 'price': discount_price})  # 添加到购物车
                    money -= discount_price  # 钱减去相应价格
                    print(f'恭喜，购买成功！您的卡余额还有{money}元')
                    break
                else:
                    print('穷鬼，钱不够！去其他超市购买！')
                    break
        else:
            print('没有这个商品，别瞎弄！')

    return cart, money

def shopping_before(money, shop_list, youhui_list):
    if money > 0:  # 钱够
        # 随机抽取一个优惠券
        youhuiquan = random.choice(youhui_list)
        cart, money_after = shopping(money, shop_list, youhuiquan)
        print('打印购物小条：')
        total_price = 0
        for item in cart:
            print(f'{item["name"]}:{item["price"]}元')  # 单个商品的名称:价格
            total_price += item['price']  # 总计费用
        print(f'购物时间：{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}')
        print(f'购物数量：{len(cart)}')
        print(f'购买总商品的价值：{total_price}元')
        print(f'剩余金额：{money_after}元')
    else:
        print('没钱，别进了！')

money = 600
shop_list = [{'name': '洗衣机', 'price': 100, 'count': 3},
             {'name': '衣服', 'price': 150, 'count': 5},
             {'name': '电扇', 'price': 80, 'count': 4},
             {'name': '空调', 'price': 300, 'count': 4},
             {'name': '冰箱', 'price': 300, 'count': 2},
             {'name': '饮料', 'price': 5, 'count': 10},
             {'name': '蛋糕', 'price': 20, 'count': 5}]

youhui_list = [{'name': '空调', 'discount': 8},
               {'name': '冰箱', 'discount': 9},
               {'name': '洗衣机', 'discount': 9},
               {'name': '冰箱', 'discount': 7},
               {'name': '洗衣机', 'discount': 1},
               {'name': '冰箱', 'discount': 7},
               {'name': '电扇', 'discount': 2},
               {'name': '冰箱', 'discount': 8},
               {'name': '电扇', 'discount': 9},
               {'name': '蛋糕', 'discount': 1}]

shopping_before(money, shop_list, youhui_list)
